//package com.yunhe.device.service.base.impl;
//
//import com.yunhe.device.domain.base.AnalogStatus;
//import com.yunhe.common.exception.ArgumentErrorException;
//import com.yunhe.common.exception.ObjectNotFoundException;
//import com.yunhe.common.exception.UniqueConstraintsException;
//import com.yunhe.device.repository.base.AnalogStatusRepository;
//import com.yunhe.device.service.base.AnalogStatusService;
//import com.yunhe.common.util.QueryUtil;
//import com.yunhe.common.util.StringUtil;
//import com.yunhe.common.util.CollectionUtil;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.*;
//
///**
// * 点表值枚举Service
// * @desc 点表值枚举服务类实现
// * @author liuronglei
// */
//@Service
//public class AnalogStatusServiceImpl implements AnalogStatusService {
//
//    @Autowired
//    private AnalogStatusRepository analogStatusRepository;
//
//    /**
//     * 点表值枚举对象处理和判断
//     * @param analogStatus 点表值枚举对象
//     */
//    private void processBeforeSave(AnalogStatus analogStatus)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        //判断点表值枚举代码、编号、标题是否为空
//        if (analogStatus.getCode() == null
//                || StringUtil.isEmpty(analogStatus.getName())
//                || StringUtil.isEmpty(analogStatus.getTitle())) {
//            throw new ArgumentErrorException("点表值枚举代码、编号、标题不能为空");
//        }
//        //判断代码是否已存在
//        AnalogStatus typeByCode = this.findByCode(analogStatus.getCode());
//        if (typeByCode != null) {
//            if (analogStatus.getId() == null || typeByCode.getId().longValue() != analogStatus.getId().longValue()) {
//                throw new UniqueConstraintsException("该点表值枚举代码已存在");
//            }
//        }
//        //判断编号是否已存在
//        AnalogStatus typeByName = this.findByName(analogStatus.getName());
//        if (typeByName != null) {
//            if (analogStatus.getId() == null || typeByName.getId().longValue() != analogStatus.getId().longValue()) {
//                throw new UniqueConstraintsException("该点表值枚举编号已存在");
//            }
//        }
//        //如果序号为空，则默认为代码
//        if (analogStatus.getSn() == null && analogStatus.getCode() != null) {
//            analogStatus.setSn(analogStatus.getCode());
//        }
//    }
//
//    /**
//     * 新增点表值枚举
//     * @param analogStatus 点表值枚举对象
//     */
//    @Override
//    @Transactional
//    public AnalogStatus createAnalogStatus(AnalogStatus analogStatus)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        analogStatus.setId(null);
//        processBeforeSave(analogStatus);
//        return analogStatusRepository.save(analogStatus);
//    }
//
//    @Override
//    @Transactional
//    public List<AnalogStatus> createAnalogStatus(List<AnalogStatus> analogStatusList)
//            throws ArgumentErrorException, UniqueConstraintsException {
//        List<AnalogStatus> results = new ArrayList<>();
//        for (AnalogStatus analogStatus : analogStatusList) {
//            results.add(createAnalogStatus(analogStatus));
//        }
//        return results;
//    }
//
//    /**
//     * 删除点表值枚举
//     * @param analogStatusId 点表值枚举ID
//     */
//    @Override
//    @Transactional
//    public void deleteAnalogStatus(Long analogStatusId) {
//        analogStatusRepository.deleteById(analogStatusId);
//    }
//
//    /**
//     * 更新点表值枚举（更新全部字段）
//     * @param analogStatus 点表值枚举对象
//     */
//    @Override
//    @Transactional
//    public AnalogStatus updateAnalogStatus(AnalogStatus analogStatus)
//            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException {
//        boolean exists = analogStatus.getId() != null && analogStatusRepository.existsById(analogStatus.getId());
//        if (!exists) {
//            throw new ObjectNotFoundException("找不到ID为" + analogStatus.getId() + "的点表值枚举");
//        }
//        processBeforeSave(analogStatus);
//        return analogStatusRepository.save(analogStatus);
//    }
//
//    /**
//     * 更新点表值枚举（更新指定字段）
//     * @param analogStatusId 点表值枚举ID
//     * @param code 代码
//     * @param name 编号
//     * @param title 标题
//     * @param val
//     * @param sn 排序序号
//     * @param activity 是否可用
//     */
//    @Override
//    @Transactional
//    public AnalogStatus updateAnalogStatus(Long analogStatusId,
//                                           Long code,
//                                           String name,
//                                           String title,
//                                           Long val,
//                                           Long sn,
//                                           Boolean activity)
//            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException {
//        AnalogStatus analogStatus = this.findByAnalogStatusId(analogStatusId);
//        if (analogStatus == null) {
//            throw new ObjectNotFoundException("找不到ID为" + analogStatusId + "的点表值枚举");
//        }
//        Optional.ofNullable(code).ifPresent(analogStatus::setCode);
//        Optional.ofNullable(name).ifPresent(analogStatus::setName);
//        Optional.ofNullable(title).ifPresent(analogStatus::setTitle);
//        Optional.ofNullable(val).ifPresent(analogStatus::setVal);
//        Optional.ofNullable(sn).ifPresent(analogStatus::setSn);
//        Optional.ofNullable(activity).ifPresent(analogStatus::setActivity);
//        processBeforeSave(analogStatus);
//        return analogStatusRepository.save(analogStatus);
//    }
//
//    /**
//     * 根据ID获得点表值枚举对象
//     * @param id 状态ID
//     */
//    @Override
//    public AnalogStatus findByAnalogStatusId(Long id) {
//        return analogStatusRepository.findById(id).orElse(null);
//    }
//
//    /**
//     * 根据代码获得点表值枚举对象
//     * @param code 代码
//     */
//    @Override
//    public AnalogStatus findByCode(Long code) {
//        return analogStatusRepository.findByCode(code);
//    }
//
//    /**
//     * 根据编号获得点表值枚举对象
//     * @param name 编号
//     */
//    @Override
//    public AnalogStatus findByName(String name) {
//        return analogStatusRepository.findByName(name);
//    }
//
//    /**
//     * 获得全部点表值枚举对象
//     */
//    @Override
//    public Iterable<AnalogStatus> findAnalogStatus() {
//        return analogStatusRepository.findAll(QueryUtil.defaultSort());
//    }
//
//    /**
//     * 获取所有的点表值枚举
//     */
//    @Override
//    public Map<Long, Map<Long, String>> findAll() {
//        Map<Long, Map<Long, String>> map = new HashMap<>();
//        List<Long> pnList = (List<Long>)analogStatusRepository.findPointNumbers();
//        List<AnalogStatus> list = (List<AnalogStatus>)analogStatusRepository.findByPointNumber(pnList);
//        for (Long pn : pnList) {
//            Map<Long, String> newMap = new HashMap<>();
//            for (AnalogStatus a : list) {
//                if (a.getCode().longValue() == pn)
//                    newMap.put(a.getVal(), a.getTitle());
//            }
//            map.put(pn, newMap);
//        }
//        return map;
//    }
//
//    /**
//     * 根据代码绑定点号数据类型
//     * @param code 代码
//     * @param pointDataTypeCode 点号数据类型代码
//     */
//    @Override
//    public void bindPointDataTypeByCode(Long code, Long pointDataTypeCode) {
//        analogStatusRepository.bindPointDataTypeByCode(code, pointDataTypeCode);
//    }
//
//    /**
//     * 根据点号和点号值获得点表值枚举
//     * @param pointNumber 点号
//     * @param value 点号值
//     */
//    @Override
//    public AnalogStatus findByPointNumberAndValue(Long pointNumber, Double value) {
//        return analogStatusRepository.findByPointNumberAndValue(pointNumber, value);
//    }
//
//    /**
//     * 根据点号和点号值列表获得点表值枚举列表
//     * @param pointNumber 点号
//     * @param valueList 点号值列表
//     */
//    @Override
//    public List<String> findAnalogStatusTitle(Long pointNumber, List<Double> valueList) {
//        if (CollectionUtil.isEmpty(valueList)){
//            return null;
//        }
//        List<String> list = new ArrayList<>();
//        for (Double value : valueList) {
//            AnalogStatus analogStatus = findByPointNumberAndValue(pointNumber, value);
//            if (analogStatus != null) {
//                list.add(analogStatus.getTitle());
//            }
//        }
//        return list;
//    }
//
////    @Override
////    public String getAnalogStatus(Long systemId, Long pointNumber) {
////        Map<Long, Double> map = realtimeService.findMeasureRealtime(Arrays.asList(pointNumber));
////        MeasurePointMap measurePointMap = measurementService.findMeasurePointMap(pointNumber);
////        Double value1 = measurementService.getValue(measurePointMap.getSjid());
////        return analogStatusRepository.getAnalogStatus(pointNumber, value1, map.get(pointNumber));
////    }
//}
